<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 在 JavaScript 中，instanceof 是用来检查一个对象是否是某个构造函数的实例的运算符。
    // 它基于对象的 prototype 属性进行检查。
    // 我们可以通过手写实现 instanceof 操作符的功能。

    // 思路
    //     instanceof 检查的原理是：
    //     它会检查对象的 __proto__ 是否能在构造函数的 prototype 链上找到。
    //     如果找到，就返回 true，否则返回 false。

    function myInstanceof(obj, constructor) {
        // 获取构造函数的prototype属性
        let prototype = constructor.prototype
        // 获取对象的__proto__链
        let objProto = obj.__proto__
        // 遍历对象的原型链
        while(objProto) {
            if (objProto === prototype) {  // 找到匹配的原型，返回 true
                return true
            }
            objProto = objProto.__proto__
        }
        return false; // 没有找到匹配的原型，返回 false
    }

    function Person(name) {
        this.name = name;
    }

    const person = new Person('John');
    console.log(person)
    console.log(myInstanceof(person, Object));
</script>
</html>